package 集合;

import java.util.*;

/**
 * Created By  醉美柳舞之众星捧月
 *
 * @author song
 * @date 2017/11/8 19:36
 */
public class Collections {
    //集合类  是一种工具类 提供了一些便捷的操作数据的方法 数据结构的包装类
    //数组  不能扩容  很麻烦
    // List 删除 插入 非常麻烦   效率低 扩容潜在麻烦比较多
    //  List 因为是连续的内存空间; 所以查找起来非常容易,效率高;
    // LinkedList 增加和删除很容易; 但是查询起来很困难

    // 此处的List和LinkedList是单列集合 顶层是Collection
    //双列集合就是有键值对的那种,顶层是Map

    // List 是有序的;下标索引从012345.......  可以重复
    //set 是没有重复元素
    //Queue 队列 =======>>  是顺序的, 先进先出

    //List :::   ArrayList , LinkedList
    //Set :::   HashSet   ,  TreeSet

    //set 是无序集合; 根据hashCode 和 equals 两个方法来判断是不是一样;    set不重复;用这两个方法来判断是否一样,两个方法都通过一样就一样
    // 其中一个不一样, 那么看起来同样的内容也会存进去;此处的equals是Object里面的方法;
    //hashset  是先根据 hashCode 来判断, 再用equals来判断 ;hashCode返回0表示一样,equals返回true表示一样

    //   TreeSet  有序的,并且去掉了重复    (   用Compare比较器来判断是否重复 ) 字典顺序    //单列集合
    //   用的是CompareTo来比较; 方法是JDK内置的比较方式;当然可以实现compare来复写compareTo来设置自己的比较方式
    int[] a = new int[5];

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList();
        list.add("LaoWang");
        list.add("LaoWang2");
        list.add("LaoWang3");
        list.add("LaoWang4");
        list.add("LaoWang5");
        list.get(1);
        System.out.println("这是ArrayList");
        for (String l : list) {
            System.out.println(l);
        }

        LinkedList<String> linkedList = new LinkedList();
        linkedList.add("song");
        linkedList.add("xian");
        linkedList.add("kun");
        linkedList.get(2);
        System.out.println("这是LinkedList");
        for (String i : linkedList) {
            System.out.println(i);
        }
        HashSet<String> set = new HashSet();
        set.add("laowang");
        set.add("laowang12");
        set.add("laowang13");
        set.add("laowang");
        set.add("laowang12");
        set.add("laowang14");
        System.out.println("这是HashSet");
        for (String s : set) {
            System.out.println(s);
        }
        //   TreeSet  有序的,并且去掉了重复    (   用Compare比较器来判断是否重复 ) 字典顺序
        TreeSet<String> treeSet = new TreeSet<>();
        treeSet.add("laowang");
        treeSet.add("laowang");
        treeSet.add("laowang999");
        treeSet.add("laowang299");
        treeSet.add("laowang666");
        treeSet.add("laowang333");
        treeSet.add("laowang1333");
        System.out.println("这是TreeSet");
        for (String tree : treeSet) {
            System.out.println(tree);
        }


        //双列集合 Map
        //HashMap TreeMap

        HashMap<String, String> map = new HashMap<>();
        map.put("laowang", "28");
        map.put("laowang2", "280");
        map.put("laowang2", "280");
        map.put("laowang3", "130");
        map.put("laowang0", "2");
        // 根据key 来获取值;               键都是唯一的
        System.out.println("这是双列集合HashMap");
        Set<String> se = map.keySet();
        for (String s : se) {
            //获取  键
            System.out.println(s);
            // 根据 键 来获取 值
            System.out.println(map.get(s));


            //或者是用Entry
            System.out.println("这是在使用Entry");
            Set<Map.Entry<String, String>> entry = map.entrySet();
            for (Map.Entry<String, String> entry1 : entry) {
                System.out.println(entry1.getKey());
                System.out.println(entry1.getValue());
            }

            // 迭代器
            Iterator iterator = set.iterator();
            while (iterator.hasNext()) {
                iterator.next();
            }
        }

    }
}
